<?php
/**
 * 文件描述  公共函数文件
 * =================================================================
 * 文件名称  functions.php
 * -----------------------------------------------------------------
 * 作    者  xiaokai<601200376@qq.com>,YYT<375776626@vip.qq.com>
 * -----------------------------------------------------------------
 * 创建时间  2010-1-19
 * -----------------------------------------------------------------
 * 版权信息  创思工作室
 * =================================================================
 */

/**
 * 系统错误
 * @access	public
 * @param	string  $message    错误信息
 * @return	void
 */
function sysError($message)
{
    exit($message);
    //完善后在扩展 //哦
}

/**
 * 加载一个Model
 * @access  public
 * @param   string  Model名称
 * @param   string  项目名称
 * @return  Model类
 */
function model($modelName, $project = '')
{
    /* 判断该Model是否已被实例化 */
    static $models = array();
    if (isset($models[$modelName])) {
        return $models[$modelName];
    /* 否则实例化 */
    } else {
        $modelFile  = CS_PATH . 'Lib/Model/';
        $project && $modelFile .= $project . '/';
        $modelFile .= $modelName . '.class.php';
        if (file_exists($modelFile)) {
            require $modelFile;
            if (class_exists($modelName)) {
                $models[$modelName] = new $modelName;
                return $models[$modelName];
            } else {
                sysError('没有这个类');
            }
        } else {
            sysError('没有这个类文件');
        }
    }
}

/**
 * 缓存数据读写
 * @access  public
 * @param   string  操作类型 "r"=读 "w"=写 "c"=删 一般不用 调用设置缓存时间 -1 就可以
 * @param   string  文件名
 * @param   mixed   数据
 * @param   int     文件生命周期
 * @return
 */
function access($method, $name, $value = '', $lifeTime = -1)
{
    /* 定义缓存路径 */
    $cacheFile = CS_PATH . 'Data/Cache/' . md5($name) . '.php';

    switch ($method) {
        case 'w';
        $data = '<?php exit(\'Access Denied\');?>' . (time() + $lifeTime);
        $data .= serialize($value);
        file_put_contents($cacheFile,$data);
        break;

        case 'r';
        if (is_readable($cacheFile)) {
            $data = file_get_contents($cacheFile);
            $dataLifeTime = substr($data,30,10);
            $result = $dataLifeTime < time() ? access('c',$name) : unserialize(substr($data,40));
            return $result;
        }
        break;

        case 'c';
        file_exists($cacheFile) && unlink($cacheFile);
        break;
    }
}

/**
 * 删除目录下所有文件 不删除目录
 * @access  public
 * @param   目录路径
 * @return  void
 */
function delDirFile($dirPath)
{
    if (is_dir($dirPath)) {
        $dir = opendir($dirPath);
        while (($fileName = readdir($dir)) !== false) {
            if ($fileName != "." && $fileName != "..") {
                $del = $dirPath . '/' . $fileName;
                is_dir($del) ? delDirFile($del) : @unlink($del);
            }
        }
        closedir($dir);
    } else {
        sysError('没有这个目录');
    }
}

/**
 * 递归创建目录函数
 * @access  public
 * @param   目录路径 如：a/b/c
 * @return  void
 */
function makeDir($dirPath)
{
    $dirArr = explode('/',$dirPath);
    for ($i = 0; $i <= count($dirArr); $i++) {
       if (!@strstr(CS_PATH,$dirArr[$i])) {
           $mkPath .= $dirArr[$i] . '/';
           if (!is_dir($mkPath)) {
               mkdir(CS_PATH . $mkPath);
           }
       }
    }
}